import axios, { type AxiosInstance, type AxiosRequestConfig, type AxiosResponse, type InternalAxiosRequestConfig } from "axios";
import { ElMessage } from 'element-plus'
import router from "@/router";

// 创建axios实例--- 基础配置
const service: AxiosInstance = axios.create({
  baseURL: "/api",
  timeout: 3000
})

// 请求拦截器
service.interceptors.request.use((conf: InternalAxiosRequestConfig) => {
  // 一般会操作：设置头部
  // application/json
  // conf.headers["Content-Type"] = "application/x-www-form-urlencoded"
  // conf.headers["token"]
  return conf
})

// 响应拦截去
service.interceptors.response.use((conf: AxiosResponse) => {
  // if (conf.data.code != 200) {
  //     ElMessage({
  //         message: conf.data.msg,
  //         type: 'error',
  //     })
  //     if (conf.data.code == 401) {
  //         // 没有登录，
  //         // 退出到登录
  //         router.push({
  //             path: "/login"
  //         })
  //     }

  // }
  return conf.data
})

// 返回值 公用 接口类型
export interface ApiResponse<T> {
  code: number,
  msg: string,
  data: T
}

// 程序并不能知道 .then 的返回值  conf.data
// 告诉程序，.then 返回值 修改了
export default <T>(config: AxiosRequestConfig): Promise<ApiResponse<T>> => {
  return service(config)
}
